﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Chilis.Marketing.Common;
using System.Data.SqlClient;
using Chilis.Marketing.Business.Entity;
using System.Data;

namespace Chilis.Marketing.Data.Access
{
    public class DARecursoRol : ConexionBD
    {
        #region ATRIBUTOS

        private SqlCommand cmd;
        ChilisDataContext chilisDataContext = new ChilisDataContext();

        #endregion

        #region CONSTRUCTOR
        #endregion

        #region PROPIEDADES
        #endregion

        #region METODOS

        /// <summary>
        /// Método              : insertarRecursoRol
        /// Descripción         : Inserta el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="actividadBE">Entidad que representa la Actividad</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id del Material insertado</returns>
        public int? insertarRecursoRol(BERecursoRol recursoRolBE,
                                      BEActividad actividadBE,
                                      bool transaccionIniciada)
        {
            int? codInsertado = 0;

            try
            {
                decimal? tempCosto = (decimal)recursoRolBE.Costo;
                int? tempIdActividad = null;
                if (actividadBE != null)
                {
                    tempIdActividad = actividadBE.IdActividad;
                }
                int? tempEstado = (int)recursoRolBE.Estado;

                chilisDataContext.spInsertaRolActividad(ref codInsertado,
                                                        recursoRolBE.Descripcion,
                                                        recursoRolBE.Cantidad,
                                                        tempCosto,
                                                        tempIdActividad,
                                                        tempEstado,
                                                        recursoRolBE.Usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return codInsertado;
        }


        /// <summary>
        /// Método              : modificarRecursoRol
        /// Descripción         : Modifica el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="actividadBE">Entidad que representa la Actividad</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarRecursoRol(BERecursoRol recursoRolBE,
                                        BEActividad actividadBE,
                                        bool transaccionIniciada)
        {
            bool respuesta = false;

            try
            {
                decimal? tempCosto = (decimal)recursoRolBE.Costo;
                int? tempIdActividad = null;
                if (actividadBE != null)
                {
                    tempIdActividad = actividadBE.IdActividad;
                }
                int? tempEstado = (int)recursoRolBE.Estado;

                chilisDataContext.spModificaRolActividad(recursoRolBE.IdRecurso,
                                                         recursoRolBE.Descripcion,
                                                         recursoRolBE.Cantidad,
                                                         tempCosto,
                                                         tempIdActividad,
                                                         tempEstado,
                                                         recursoRolBE.Usuario);

                respuesta = true;
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarRecursoRol
        /// Descripción         : Elimina el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarRecursoRol(BERecursoRol recursoRolBE,
                                       bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)recursoRolBE.Estado;

                chilisDataContext.spEliminaRolActividad(recursoRolBE.IdRecurso,
                                                        tempEstado,
                                                        recursoRolBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : obtenerRecursoRolPorId
        /// Descripción         : Obtiene la Entidad Recurso Rol
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="idRecursoRol">Id Recurso Rol</param>
        /// <returns>Retorna el Objeto que representa la Entidad Rol</returns>
        public BERecursoRol obtenerRecursoRolPorId(int idRecursoRol)
        {
            DataSet ds = null;
            BERecursoRol recursoRolBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelRolActividadPorId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdRolActividad", idRecursoRol));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    recursoRolBE = this.poblarRecursoRol(ds.Tables[(int)Constantes.ROL_DATOS.DATOS_GENERALES], recursoRolBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return recursoRolBE;
        }

        /// <summary>
        /// Método              : poblarRol
        /// Descripción         : Se encarga de poblar los datos obtenidos en la Entidad Material
        /// Fecha Creacion      : 20/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 20/03/2012
        /// </summary>
        /// <param name="dtRecursoRol">Resultado de la Búsqueda por Id</param>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <returns>Retorna el Objeto que representa la Entidad Recurso Rol</returns>
        public BERecursoRol poblarRecursoRol(DataTable dtRecursoRol, BERecursoRol recursoRolBE)
        {
            if (dtRecursoRol != null && dtRecursoRol.Rows.Count > 0)
            {
                if (recursoRolBE == null)
                {
                    recursoRolBE = new BERecursoRol();
                }
                DataRow drRecursoRol = dtRecursoRol.Rows[0];
                if (drRecursoRol["id_rol_actividad"] != DBNull.Value)
                {
                    int tempIdRolActividad = 0;
                    int.TryParse(drRecursoRol["id_rol_actividad"].ToString(), out tempIdRolActividad);
                    recursoRolBE.IdRecurso = tempIdRolActividad;
                }
                if (drRecursoRol["descripcion"] != DBNull.Value)
                {
                    recursoRolBE.Descripcion = drRecursoRol["descripcion"].ToString();
                }
                if (drRecursoRol["cantidad"] != DBNull.Value)
                {
                    int tempCantidad = 0;
                    int.TryParse(drRecursoRol["cantidad"].ToString(), out tempCantidad);

                    recursoRolBE.Cantidad = tempCantidad;
                }
                if (drRecursoRol["costo"] != DBNull.Value)
                {
                    double tempCosto = 0;
                    if (double.TryParse(drRecursoRol["costo"].ToString(), out tempCosto))
                    {
                        recursoRolBE.Costo = tempCosto;
                    }
                }
                if (drRecursoRol["estado"] != DBNull.Value)
                {
                    recursoRolBE.Estado = Common.Constantes.ObtenerEnumEstado(drRecursoRol["estado"].ToString());
                }
            }
            return recursoRolBE;
        }

        /// <summary>
        /// Método              : insertarTrabajadorParaRecursoRol
        /// Descripción         : Inserta el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id del Material insertado</returns>
        public int? insertarTrabajadorParaRecursoRol(BERecursoRol recursoRolBE,
                                                     bool transaccionIniciada)
        {
            int? codInsertado = 0;

            try
            {
                BETrabajadorRol trabajadorRolBE = null;
                if (recursoRolBE.LTrabajador != null && recursoRolBE.LTrabajador.Count > 0)
                {
                    trabajadorRolBE = recursoRolBE.LTrabajador[0];
                    if (trabajadorRolBE.Trabajador == null)
                    {
                        return codInsertado;
                    }
                }
                else
                {
                    return codInsertado;
                }

                int? tempIdRecurso = null;
                if (recursoRolBE != null)
                {
                    tempIdRecurso = recursoRolBE.IdRecurso;
                }
                int? tempIdTrabajador = null;
                if (trabajadorRolBE.Trabajador != null)
                {
                    tempIdTrabajador = trabajadorRolBE.Trabajador.IdTrabajador;
                }
                decimal? tempSueldo = (decimal)trabajadorRolBE.Sueldo;
                int? tempEstado = (int)trabajadorRolBE.Estado;

                chilisDataContext.spInsertaTrabajadorRol(ref codInsertado,
                                                         tempIdRecurso,
                                                         tempIdTrabajador,
                                                         tempSueldo,
                                                         tempEstado,
                                                         trabajadorRolBE.Usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return codInsertado;
        }

        /// <summary>
        /// Método              : modificarTrabajadorParaRecursoRol
        /// Descripción         : Modifica el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarTrabajadorParaRecursoRol(BERecursoRol recursoRolBE,
                                                      bool transaccionIniciada)
        {
            bool respuesta = false;

            try
            {
                BETrabajadorRol trabajadorRolBE = null;
                if (recursoRolBE.LTrabajador != null && recursoRolBE.LTrabajador.Count > 0)
                {
                    trabajadorRolBE = recursoRolBE.LTrabajador[0];
                    if (trabajadorRolBE.Trabajador == null)
                    {
                        return respuesta;
                    }
                }
                else
                {
                    return respuesta;
                }

                int? tempIdRecurso = null;
                if (recursoRolBE != null)
                {
                    tempIdRecurso = recursoRolBE.IdRecurso;
                }
                int? tempIdTrabajador = null;
                if (trabajadorRolBE.Trabajador != null)
                {
                    tempIdTrabajador = trabajadorRolBE.Trabajador.IdTrabajador;
                }
                decimal? tempSueldo = (decimal)trabajadorRolBE.Sueldo;
                int? tempEstado = (int)trabajadorRolBE.Estado;

                chilisDataContext.spModificaTrabajadorRol(trabajadorRolBE.IdTrabajadorRol,
                                                          tempIdRecurso,
                                                          tempIdTrabajador,
                                                          tempSueldo,
                                                          tempEstado,
                                                          trabajadorRolBE.Usuario);

                respuesta = true;
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarTrabajadorParaRecursoRol
        /// Descripción         : Elimina el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarTrabajadorParaRecursoRol(BERecursoRol recursoRolBE,
                                                     bool transaccionIniciada)
        {
            bool respuesta = false;

            try
            {
                BETrabajadorRol trabajadorRolBE = null;
                if (recursoRolBE.LTrabajador != null && recursoRolBE.LTrabajador.Count > 0)
                {
                    trabajadorRolBE = recursoRolBE.LTrabajador[0];
                }
                else
                {
                    return respuesta;
                }

                int? tempEstado = (int)trabajadorRolBE.Estado;

                chilisDataContext.spEliminaTrabajadorRol(trabajadorRolBE.IdTrabajadorRol,
                                                         tempEstado,
                                                         trabajadorRolBE.Usuario);

                respuesta = true;
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Función             : obtenerTrabajadoresPorIdRolActividad
        /// Descripción         : Busca los Materiales de acuerdo a los filtros configurados
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="filtro">Entidad que representa la Actividad</param>
        /// <returns>Listado de Materiales de acuerdo al filtro especificado</returns>
        public DataTable obtenerTrabajadoresPorIdRolActividad(int idRolActividad)
        {
            DataTable dt = new DataTable();
            SqlDataAdapter da = null;
            this.Conexion();
            cmd = new SqlCommand();
            cmd.Connection = this.connection;

            this.AbrirConexion();

            cmd.CommandText = "spSelTrabajadorPorRolId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();

            cmd.Parameters.Add(new SqlParameter("@pIdRolActividad", idRolActividad));

            try
            {
                da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (Exception ex)
            {
                dt = null;
                throw ex;
            }
            finally
            {
                if (da != null)
                {
                    da.Dispose();
                }
                cmd.Dispose();
                this.CerrarConexion();
            }
            return dt;

        }

        /// <summary>
        /// Método              : modificarSueldoTrabajadorParaRecursoRol
        /// Descripción         : Modifica el Recurso Rol en la BD
        /// Fecha Creacion      : 26/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 26/03/2012
        /// </summary>
        /// <param name="recursoRolBE">Entidad que representa el Recurso Rol</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarSueldoTrabajadorParaRecursoRol(BERecursoRol recursoRolBE,
                                                            bool transaccionIniciada)
        {
            bool respuesta = false;

            try
            {
                BETrabajadorRol trabajadorRolBE = null;
                if (recursoRolBE.LTrabajador != null && recursoRolBE.LTrabajador.Count > 0)
                {
                    trabajadorRolBE = recursoRolBE.LTrabajador[0];
                }
                else
                {
                    return respuesta;
                }

                decimal? tempSueldo = (decimal)trabajadorRolBE.Sueldo;
                int? tempEstado = (int)trabajadorRolBE.Estado;

                chilisDataContext.spModificaSueldoTrabajadorRol(trabajadorRolBE.IdTrabajadorRol,
                                                                tempSueldo,
                                                                tempEstado,
                                                                trabajadorRolBE.Usuario);

                respuesta = true;
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        #endregion
    }
}
